import java.util.Arrays;

/**
 * @ Author     ：侯耀祖
 * @ Description：
 */
public class cake {
    public int maxArea(int h, int w, int[] horizontalCuts, int[] verticalCuts) {
        Arrays.sort(horizontalCuts);
        Arrays.sort(verticalCuts);;
        int result = 0;
//        public int maxArea(int h, int w, int[] horizontalCuts, int[] verticalCuts) {
//            Arrays.sort(horizontalCuts);
//            Arrays.sort(verticalCuts);
//
//            int[] hor = new int[horizontalCuts.length + 2];
//            int[] ver = new int[verticalCuts.length + 2];
//
//            hor[0] = 0;
//            ver[0] = 0;
//
//            int result = 0;
//
//            for (int i = 1; i < hor.length - 1; i++) {
//                hor[i] = horizontalCuts[i - 1];
//            }
//            hor[hor.length - 1] = h;
//
//            for (int i = 1; i < ver.length - 1; i++) {
//                ver[i] = verticalCuts[i - 1];
//            }
//            ver[ver.length - 1] = w;
//            int maxh = 0;
//            int maxv = 0;
//            for (int i = 1; i < hor.length; i++) {
//                if(hor[i]-hor[i-1]>maxh)
//                    maxh=hor[i]-hor[i-1];
//            }
//            for (int i = 1; i < ver.length; i++) {
//                if(ver[i]-ver[i-1]>maxv)
//                    maxv=ver[i]-ver[i-1];
//            }
//            result = (int)(((long)maxh*maxv) % 1000000007);
//            return result;
//        }

        return (int) ((long) Max(horizontalCuts, h) * Max(verticalCuts, w) % 1000000007);
    }
    public int Max(int[] a, int boardr){
        int res = 0, pre = 0;
        for (int i = 0; i < a.length; i++) {
            res = Math.max(i-pre, res);
            pre = i;
        }
        return Math.max(res, boardr-pre);
    }
}
